<?php
/**
 * Service_Essence
 *
 * Класс Service_Essence осуществляет работу с типами сущностей (ID, имя)
 *
 * @author Гринько Виталий <perlaws@gmail.com>
 * @version 1.0
 */
class Service_Essence {
  
  /**
   * Получение имени сущности по идентификатору
   *
   * @param int $essenceNumber
   * @return string
   */
  public static function getEssenceTypeName($essenceNumber) {
    switch ($essenceNumber) {
    	case 1:
        	return 'article';
  		case 2:
  			return 'comment';			  
  		case 3:
  			return 'user';
  		case 4:
  			return 'catalog';
      case 5:
        return 'question';			
      case 6:
        return 'answer';
      case 7:
        return 'tutorial_lesson';
      case 8:
        return 'tutorial_complex';
      case 9:
      	return 'tutorial_theme';
  		default:
  		  return false;
  	}
  }
  
  /**
   * Получение идентификатора сущности по любому параметру
   *
   * @param mixed $essenceType
   * @return int
   */
  public static function getEssenceTypeID($essenceType) {
    if(is_string($essenceType)) 
      return (int)self::getEssenceTypeIDByName($essenceType);
    elseif (!is_numeric($essenceType))
      throw new Exception('Неправильный ввод числового/строкового значения типа сущности');
    return $essenceType;
  }
  /**
   * Получение идентификатора сущности по имени
   *
   * @param string $essenceName
   * @return int
   */
  public static function getEssenceTypeIDByName(string $essenceName) {
    switch ($essenceName) {
        case 'article':
        	return 1;
  		case 'comment':
  		    return 2;			  
  		case 'user':
  	    	return 3;
  		case 'catalog':
  		    return 4;
      case 'question':
          return 5;
      case 'answer':
      	return 6;
      case 'tutorial_lesson':
        return 7;
      case 'tutorial_complex':
      	return 8;
      case 'tutorial_theme':
      	return 9;		
  		default:
  		  return false;
  	}
  }
 
  /**
   * Формирует очередной элемент массива с данными обо всех сущностях для отображения элемента управления "Star rating"
   *
   * @param array $arrEssence
   * @param int|string $type
   * @param bool $isDisabled
   * @return array
   */
  public static function makeJsonMarkArrayElement(array $arrEssence, $type, $isDisabled = false) {
    $arrStarsControlsElement = array();
    if (is_string($type))
      $type = (int)Service_Essence::getEssenceTypeID($type);
    else 
      if (!is_numeric($type))
        return false;
    $arrStarsControlsElement = array(
        "disabled" => $isDisabled,
        "essenceType" => $type,
        "ID_essence" => $arrEssence['ID_' . Service_Essence::getEssenceTypeName($type)]
      );
    if (!is_null($arrEssence['average_mark'])) 
      $arrStarsControlsElement['selected'] = floor($arrEssence['average_mark']);
    return $arrStarsControlsElement;
  }  
  
  /**
   * Формирует очередной элемент массива с данными обо всех сущностях для отображения элемента управления "Voting"
   *
   * @param array $arrEssence
   * @param unknown_type $type
   * @return unknown
   */
  public static function makeJsonVotingArrayElement(array $arrEssence, $type/*, $isDisabled = false*/) {
    $arrVotingControlsElement = array();
    if (is_string($type))
      $type = (int)Service_Essence::getEssenceTypeID($type);
    else 
      if (!is_numeric($type))
        return false;
    $arrVotingControlsElement = array(
        /*"disabled" => $isDisabled,*/
        "essenceType" => $type,
        "ID_essence" => $arrEssence['ID_' . Service_Essence::getEssenceTypeName($type)]
      );
    return $arrVotingControlsElement;
  }

}
?>